package service.Impl;

import dao.DoctorDao;
import dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pojo.Doctor;
import pojo.User;
import service.UserService;
import java.util.HashMap;
import java.util.Map;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Autowired
    private DoctorDao doctorDao;

    @Override
    public int insertUser(User user) {
        // 实现用户插入逻辑
        return userDao.insertUser(user);
    }

    @Override
    public int deleteUserById(Integer userId) {
        // 实现用户删除逻辑
        if (userId == null) {
            throw new IllegalArgumentException("用户ID不能为空");
        }
        return userDao.deleteUserById(userId);
    }

    @Override
    public int updateUser(User user) {
        // 实现用户信息更新逻辑
        if (user == null || user.getUserId() == null) {
            throw new IllegalArgumentException("用户信息或ID不能为空");
        }
        return userDao.updateUser(user);
    }

    @Override
    public User selectUserById(Integer userId) {
        return userDao.selectUserById(userId);
    }

    @Override
    public List<User> selectAllUsers() {
        return userDao.selectAllUsers();
    }

    @Override
    public User selectUserByUsername(String username) {
        return userDao.selectUserByUsername(username);
    }
    // 新增方法实现
    @Override
    public boolean resetUserPassword(Integer userId) {
        User user = userDao.findById(userId);
        if (user == null) {
            return false;
        }
        // 重置密码逻辑（示例：设为默认密码，实际需加密）
        user.setPassword("default123");
        return userDao.update(user) > 0;
    }
    @Override
    public boolean updateUserStatus(Integer userId, String status) {
        // 1. 根据 userId 查询用户
        User user = userDao.findById(userId);
        if (user == null) {
            // 用户不存在，返回更新失败
            return false;
        }

        // 2. 设置新的状态
        user.setStatus(status);

        // 3. 调用 UserDao 的更新方法，执行数据库更新操作
        int affectedRows = userDao.update(user);

        // 4. 根据受影响行数判断是否更新成功（大于 0 表示更新了至少一条数据）
        return affectedRows > 0;
    }

    @Override
    public Map<String, Object> login(String userName, String password, String userRole) {
        Map<String, Object> result = new HashMap<>();
        // 参数校验
        if (userName == null || password == null || userRole == null) {
            result.put("code", 400);
            result.put("msg", "用户名、密码、角色不能为空");
            return result;
        }
        // 数据库查询
        User user = userDao.findByUserNameAndRole(userName, userRole);
        if (user == null) {
            result.put("code", 401);
            result.put("msg", "用户不存在或角色错误");
            return result;
        }
        // 密码校验（实际应加密）
        if (!password.equals(user.getPassword())) {
            result.put("code", 401);
            result.put("msg", "密码错误");
            return result;
        }
        // 更新登录信息
        updateLoginInfo(user);

        // 返回用户信息
        Map<String, Object> userInfo = new HashMap<>();
        userInfo.put("user_id", user.getUserId());
        userInfo.put("user_name", user.getUserName());
        userInfo.put("real_name", user.getRealName());
        userInfo.put("user_role", user.getUserRole());
//NOTE  医生端页面使用
        if(userRole.equals("doctor")){
            Doctor doctor = doctorDao.selectDoctorByUsername(userName);
            if (doctor == null){
                result.put("code", 401);
                result.put("msg", "医生用户不存在");
                return result;
            }
            userInfo.put("doc_id", doctor.getDocId());
            userInfo.put("doc_title", doctor.getDocTitle());
            userInfo.put("doc_avatar", doctor.getImg());
            userInfo.put("telephone", doctor.getTelephone());
        }

        result.put("code", 200);
        result.put("msg", "登录成功");
        result.put("data", userInfo);
        return result;
    }

    private void updateLoginInfo(User user) {
        // 增加登录次数
        Integer loginCount = user.getLoginCount();
        if (loginCount == null) {
            user.setLoginCount(1);
        } else {
            user.setLoginCount(loginCount + 1);
        }
        // 更新最后登录时间
        user.setLastLogin(new java.util.Date());
        // 调用DAO更新（需确保UserDao有对应方法）
        userDao.updateUser(user);
    }

    @Override
    public int updateUserPersonalSettings(User user) {
        return userDao.updateUserPersonalSettings(user);
    }
}

